package pe.gob.mtc.dgac.licencias.controller;

import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import pe.gov.mtc.dgac.licencias.bean.AuditoriaProcedimientoTO;
import pe.gov.mtc.dgac.licencias.bean.AuditoriaProcedimientoTOPK;
import pe.gov.mtc.dgac.licencias.bean.HallazgoTO;
import pe.gov.mtc.dgac.licencias.bean.Usuario;
import pe.gov.mtc.dgac.licencias.service.AuditoriaProcedimientoService;
import pe.gov.mtc.dgac.licencias.service.HallazgoService;
import pe.gov.mtc.dgac.licencias.util.Utiles;

/**
 *
 * @author elvis
 */
@Controller
@Scope("session")
public class HallazgosController {

    @Autowired
    private HallazgoService hallazgoService;
    @Autowired
    private AuditoriaProcedimientoService auditoriaProcedimientoService;
    
    @RequestMapping("/calidad/lhallazgo.htm")
    public String lhallazgo(@RequestParam("ca") int id_aud,@RequestParam("cp") int id_proc,HttpServletRequest request,ModelMap model) {
        System.out.println("calidad/lhallazgo => id procedimiento " + id_proc +  " AUD " + id_aud);
        AuditoriaProcedimientoTO proc = auditoriaProcedimientoService.obtenerAuditProc(id_aud, id_proc);
        model.put("lhallazgos", hallazgoService.listarHallazgos(id_aud,id_proc) );
        model.put("procedimiento", proc);
        HallazgoTO nh = new HallazgoTO();
        nh.setAuditoriaProcedimientoTO(proc);
        model.put("bhallazgo", nh );
        return "calidad/lhallazgo";
    }
    
    @RequestMapping(value="/calidad/bhallazgo.htm",method=RequestMethod.POST)
    public String bhallazgo(@Valid HallazgoTO bhallazgo, BindingResult result,HttpServletRequest request,ModelMap model) {
        System.out.println("calidad/bhallazgo");
        
        int id_aud = bhallazgo.getAuditoriaProcedimientoTO().getAuditoriaTO().getCodAuditoria().intValue();
        int id_proc = bhallazgo.getAuditoriaProcedimientoTO().getProcedimientoTO().getCodProcedimiento().intValue();
        AuditoriaProcedimientoTO proc = auditoriaProcedimientoService.obtenerAuditProc(id_aud, id_proc);
        
        model.put("lhallazgos", hallazgoService.listarHallazgos(id_aud,id_proc) );
        model.put("procedimiento", proc);
        model.put("bhallazgo", bhallazgo);
        //model.put("lhallazgos", lista);
        return "calidad/lhallazgo";
    }
    
    @RequestMapping("/calidad/editHallazgo.htm")
    public String editHallazgo(@RequestParam("codigo") int id,HttpServletRequest request,ModelMap model) {
        System.out.println("calidad/editHallazgo");
        model.put("nhallazgo", hallazgoService.obtenerHallazgo(id));
        return "calidad/nhallazgo";
    }
    
    @RequestMapping(value="/calidad/nhallazgo.htm",method=RequestMethod.POST)
    public String nhallazgo(@Valid HallazgoTO bhallazgo, BindingResult result,HttpServletRequest request,ModelMap model) {
        System.out.println("calidad/nhallazgo");
        int id_aud = bhallazgo.getAuditoriaProcedimientoTO().getAuditoriaTO().getCodAuditoria().intValue();
        int id_proc = bhallazgo.getAuditoriaProcedimientoTO().getProcedimientoTO().getCodProcedimiento().intValue();
        AuditoriaProcedimientoTO proc = auditoriaProcedimientoService.obtenerAuditProc(id_aud, id_proc);
        HallazgoTO nha  = new HallazgoTO();
        nha.setAuditoriaProcedimientoTO(proc);
        model.put("nhallazgo", nha );
        return "calidad/nhallazgo";
    }
       
    @RequestMapping("/calidad/verHallazgo.htm")
    public String verHallazgo(@RequestParam("codigo") int id,HttpServletRequest request,ModelMap model) {
        System.out.println("calidad/dhallazgo");
        model.put("dhallazgo", hallazgoService.obtenerHallazgo(id));
        return "calidad/dhallazgo";
    }
     //
    @RequestMapping("/calidad/delHallazgo.htm")
    public String delHallazgo(@RequestParam("codigo") int id,HttpServletRequest request,ModelMap model) {
        System.out.println("calidad/lhallazgo");
        HallazgoTO hto = hallazgoService.obtenerHallazgo(id);
        hallazgoService.eliminarHallazgo(id);
        return lhallazgo(hto.getAuditoriaProcedimientoTO().getAuditoriaTO().getCodAuditoria().intValue() , hto.getAuditoriaProcedimientoTO().getProcedimientoTO().getCodProcedimiento().intValue(), request, model);
    }
    @RequestMapping(value="/calidad/rhallazgo.htm",method=RequestMethod.POST)
    public String rhallazgo(@Valid HallazgoTO nhallazgo, BindingResult result,HttpServletRequest request,ModelMap model) {
        try {
            System.out.println("calidad/rhallazgo");
            nhallazgo.setFecCrea(new Date());
            Usuario usr = (Usuario) request.getSession().getAttribute("usr");
            nhallazgo.setUsuarioCrea(usr.getLogin());
            nhallazgo.setFecha( Utiles.stringToDate(request.getParameter("fecha"), "dd/MM/yyyy") );
            
            Long id_aud = nhallazgo.getAuditoriaProcedimientoTO().getAuditoriaTO().getCodAuditoria();
            Long id_proc = nhallazgo.getAuditoriaProcedimientoTO().getProcedimientoTO().getCodProcedimiento();
        
            AuditoriaProcedimientoTOPK aopk = new AuditoriaProcedimientoTOPK(id_proc, id_aud);
            nhallazgo.getAuditoriaProcedimientoTO().setAuditoriaProcedimientoTOPK(aopk);
            hallazgoService.registrarHallazgo(nhallazgo);
            
            return lhallazgo(  id_aud.intValue() ,id_proc.intValue() , request, model);
            
        } catch (Exception e) {
            e.printStackTrace();
            nhallazgo.setCodHallazgo(null);
            model.put("nhallazgo", nhallazgo);
            model.put("msgError", e.getMessage());
            return "calidad/nhallazgo";
        }
    }
    
    
}
